package com.powerManager.sdk.utils;

import java.util.List;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

public class SysUtils {
	
	private static Logger LOG = Logger.getLogger(SysUtils.class);
	
	/**
	 * -- 转义HTML符号.<br/>
	 * -- 把[&]转为{&amp;}<br/>
	 * -- 把[<]转为{&amp;lt;}<br/>
	 * -- 把[>]转为{&amp;gt;}<br/>
	 * -- 把[']转为{&amp;apos;}<br/>
	 * -- 把["]转为{&amp;quot;}
	 * @param html -- 需要转义HTML符号的字符串
	 * @return -- 转义HTML符号后的字符串
	 */
	public static String replaceHTML(String html) {
		// 如果参数为空则原路返回.
		if (html == null || html.equals("")) {
			return html;
		}
		html = html.replaceAll("&", "&amp;");
		html = html.replaceAll("<", "&lt;");
		html = html.replaceAll(">", "&gt;");
		html = html.replaceAll("'", "&apos;");
		html = html.replaceAll("\"", "&quot;");
		html = html.trim();
		return html;
	}

	/**
	 * -- 转义HTML符号.<br/>{方法重载}
	 * 
	 * @param htmls
	 * @return
	 */
	public static String[] replaceHTML(String[] htmls) {
		if (htmls == null || htmls.length <= 0) {
			return htmls;
		}
		for (int i = 0; i < htmls.length; i++) {
			htmls[i] = replaceHTML(htmls[i]);
		}
		return htmls;
	}

	/**
	 * -- 转义HTML符号.<br/>{方法重载}
	 * 
	 * @param htmls
	 * @return
	 */
	public static List<String> replaceHTML(List<String> htmls) {
		if (htmls == null || htmls.size() <= 0) {
			return htmls;
		}
		for (int i = 0; i < htmls.size(); i++) {
			htmls.set(i, replaceHTML(htmls.get(i)));
		}
		return htmls;
	}

	/**
	 * -- 判断参数中的字符是否为数值
	 * @param strNumber --
	 *            需要判断的字符串
	 * @return -- 如果是数值返回[true],否则返回[false]
	 */
	public static Boolean isNaN(String strNumber) {
		if (strNumber == null || strNumber.equals("")) {
			return false;
		}
		return strNumber.matches("(\\-)?\\d+");
	}

	/**
	 * -- 将字符串转换为数字,如果转换失败则返回NULL
	 * 
	 * @param str --
	 *            String
	 * @return -- Number
	 */
	public static Integer parseInt(String str) {
		if (isNaN(str))
			return Integer.valueOf(str);
		return null;
	}

	/**
	 * -- 判断参数中的字符是否为数值或小数
	 * 
	 * @param strNumber --
	 *            需要判断的字符串
	 * @return -- 如果是数值或小数返回[true],否则返回[false]
	 */
	public static Boolean isFloat(String strFloat) {
		if (strFloat == null || strFloat.equals("")) {
			return false;
		}
		return strFloat.matches("(\\-)?\\d+(\\.\\d+)?");
	}

	/**
	 * -- 将字符串转换为小数,如果转换失败则返回NULL
	 * 
	 * @param str --
	 *            String
	 * @return -- Float
	 */
	public static Float parseFloat(String str) {
		if (isFloat(str))
			return Float.valueOf(str);
		return null;
	}

	/**
	 * -- 读取属性文件[.properties]
	 * 
	 * @param baseName --
	 *            属性文件名称及路径默认路径为[classes/]
	 * @param key --
	 *            键，要读取的内容的键
	 * @return -- 返回根据键读取到的值如果没有则返回NULL
	 */
	public static String read(String baseName, String key) {
		if (baseName == null || baseName.equals(""))
			return null;
		ResourceBundle bundle = ResourceBundle.getBundle(baseName);
		String value = null;
		try {
			value = bundle.getString(key);
		} catch (Exception e) {
			value = null;
			LOG.error("读取属性文件出错:"+e.getMessage());
		}
		return value;
	}

	/**
	 * -- 反射
	 * 
	 * @param c --
	 *            类元数据
	 * @return -- 类的实例对象
	 */
	public static Object newInstance(Class<?> c) {
		try {
			return c.newInstance();
		} catch (Exception e) {
			LOG.error("实例化对象出错:"+e.getMessage());
		}
		return null;
	}
	
	/**
	 * -- 反射
	 * 
	 * @param className -- 类名,字符串形式
	 * @return -- 类的实例对象
	 */
	public static Object newInstance(String className){
		return SysUtils.newInstance(SysUtils.forName(className));
	}

	/** -- 反射
	 * @param className -- 类名
	 * @return -- 类元数据
	 */
	public static Class<?> forName(String className) {
		try {
			Class<?> c = Class.forName(className);
			return c;
		} catch (Exception e) {
			//logger.error(e.getMessage());
		}
		return null;
	}
}
